import { patch } from "./vnode/patch"
export function mountComponent(vm, el) {
    // -----------------------------------------------------------------
    // 生命周期钩子函数beforeMount调用，在生成虚拟dom之前
    callHook(vm, "beforeMount")
    // ---------------------------------------------------------------
    // vm._render方法是将render函数变成虚拟dom（vnode）
    // vm._update方法是将虚拟dom(vnode)转换成真实dom
    vm._update(vm._render())

    // --------------------------------------------------
    // 生命周期钩子函数mounted调用
    // 真实dom已经生成且替换到页面上，用户可以看到数据了
    callHook(vm, "mounted")
    // ----------------------------------------------------
}

export function lifecycleMixin(Vue) {
    Vue.prototype._update = function (vnode) {
        // -----------------------------------------------------
        let vm = this
        // 虚拟dom转换成真实dom
        vm.$el = patch(vm.$el, vnode)
        // --------------------------------------------------------
    }
}
// -----------------------------------------------------------------------
// 生命周期方法调用
export function callHook(vm, hook) {
    let handlers = vm.$options[hook]

    if (handlers) {
        for (let i = 0; i < handlers.length; i++) {
            // 设置生命周期钩子函数中的this指向
            console.log(handlers[i]);
            handlers[i].call(this)
        }
    }
}